﻿using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Text.Json.Serialization;

namespace ZKTEcoPush.Models
{
    public class DeviceInitial
    {
        // ${Required}表示客户端的序列号
        [Required]
        [FromQuery(Name = "SN")]
        public string SN { get; set; } = string.Empty;

        // ${Required}表示获取服务器配置参数，目前值只有all
        [IgnoreDataMember]
        public string Options { get; set; } = "all";

        // ${Optional}表示设备当前最新的push协议版本，新开发的客户端必须支持且必须大于等于2.2.14 版本
        [FromQuery(Name = "pushver")]
        public string Pushver { get; set; } = string.Empty;

        /// <summary>
        /// 子协议版本，本协议支持对接标准考勤协议、人证协议、信息屏协议，软件可以根据此
        /// 参数判断设备使用哪种协议，取值如下：
        /// att：标准考勤协议
        /// pid：人证协议
        /// ins：信息屏协议
        /// </summary>
        [EnumDataType(typeof(DeviceTypeEnum))]
        [FromQuery(Name = "DeviceType")]
        public string DeviceType { get; set; } = string.Empty;

        // ${Optional}表示客户端支持的语言，新开发的客户端最好支持，服务端可通过该参数知道
        // 目前设备是什么语言
        [FromQuery(Name = "language")]
        public string Language { get; set; } = string.Empty;

        // ${Optional}表示客户端与服务器绑定的密文信息，软件通过此密文判断设备是否经过
        // 授权，不同设备值一般是不一样的，该参数需要服务器支持之后，客户端才需支持
        [FromQuery(Name = "pushcommkey")]
        public string PushCommkey { get; set; } = string.Empty;
    }
}
